/**
 * API统一导出文件
 * 集中管理所有API模块的导入和导出
 */

// 导入API模块
import authAPI from './modules/auth.js'
import deviceAPI from './modules/device.js'
import orderAPI from './modules/order.js'
import userAPI from './modules/user.js'
import smsAPI from './modules/sms.js'
import bannerAPI from './modules/banner.js'

// 导入配置和工具
import { API_CONFIG, API_ENDPOINTS, USER_STATUS, USER_ROLE, DEVICE_STATUS, ORDER_STATUS } from './config.js'
import http from './request.js'

/**
 * API服务类
 * 统一管理所有API调用
 */
class APIService {
  constructor() {
    this.auth = authAPI
    this.device = deviceAPI
    this.order = orderAPI
    this.user = userAPI
    this.sms = smsAPI
    this.banner = bannerAPI
    this.http = http
  }

  /**
   * 初始化API服务
   * 可在应用启动时调用，进行必要的初始化配置
   */
  init() {
    // 可以在这里添加全局初始化逻辑
    console.log('API Service initialized')
  }

  /**
   * 获取API配置信息
   */
  getConfig() {
    return API_CONFIG
  }

  /**
   * 获取API端点配置
   */
  getEndpoints() {
    return API_ENDPOINTS
  }

  /**
   * 检查网络连接状态
   */
  checkNetworkStatus() {
    return new Promise((resolve) => {
      uni.getNetworkType({
        success: (res) => {
          resolve({
            isConnected: res.networkType !== 'none',
            networkType: res.networkType
          })
        },
        fail: () => {
          resolve({
            isConnected: false,
            networkType: 'unknown'
          })
        }
      })
    })
  }

  /**
   * 批量预加载数据
   * 应用启动时可调用此方法预加载关键数据
   */
  async preloadData() {
    try {
      const tasks = []

      // 如果用户已登录，预加载用户相关数据
      if (this.auth.isLoggedIn()) {
        tasks.push(
          this.user.getUserProfile().catch(() => null),
          this.user.getUnreadNotificationCount().catch(() => null)
        )
      }

      // 预加载设备品牌和分类数据
      tasks.push(
        this.device.getDeviceBrands().catch(() => null),
        this.device.getDeviceCategories().catch(() => null)
      )

      const results = await Promise.allSettled(tasks)
      console.log('数据预加载完成:', results)

      return results
    } catch (error) {
      console.error('数据预加载失败:', error)
      return []
    }
  }

  /**
   * 清除所有缓存数据
   */
  clearCache() {
    try {
      // 清除token和用户信息
      this.http.clearTokens()
      
      // 清除其他可能的缓存数据
      const keysToRemove = [
        'device_brands_cache',
        'device_categories_cache',
        'user_stats_cache',
        'notification_settings_cache'
      ]

      keysToRemove.forEach(key => {
        try {
          uni.removeStorageSync(key)
        } catch (error) {
          console.warn(`清除缓存失败: ${key}`, error)
        }
      })

      console.log('缓存清除完成')
    } catch (error) {
      console.error('清除缓存失败:', error)
    }
  }

  /**
   * 应用错误处理
   * 统一处理API调用产生的错误
   * @param {Error} error 错误对象
   * @param {String} context 错误上下文
   */
  handleError(error, context = '') {
    console.error(`API Error in ${context}:`, error)

    // 根据错误类型进行处理
    if (error.code) {
      switch (error.code) {
        case 401:
          // 未授权错误，跳转到登录页
          uni.showToast({
            title: '请先登录',
            icon: 'none'
          })
          setTimeout(() => {
            uni.reLaunch({
              url: '/pages/login/index'
            })
          }, 1500)
          break
        case 403:
          // 权限不足
          uni.showToast({
            title: '权限不足',
            icon: 'none'
          })
          break
        case 404:
          // 资源不存在
          uni.showToast({
            title: '请求的资源不存在',
            icon: 'none'
          })
          break
        case 500:
          // 服务器错误
          uni.showToast({
            title: '服务器错误，请稍后重试',
            icon: 'none'
          })
          break
        default:
          // 其他错误
          uni.showToast({
            title: error.message || '操作失败',
            icon: 'none'
          })
      }
    } else {
      // 网络错误或其他未知错误
      uni.showToast({
        title: '网络连接异常',
        icon: 'none'
      })
    }
  }

  /**
   * 设置请求拦截器
   * @param {Function} interceptor 拦截器函数
   */
  setRequestInterceptor(interceptor) {
    this.http.addRequestInterceptor(interceptor)
  }

  /**
   * 设置响应拦截器
   * @param {Function} successHandler 成功处理函数
   * @param {Function} errorHandler 错误处理函数
   */
  setResponseInterceptor(successHandler, errorHandler) {
    this.http.addResponseInterceptor(successHandler, errorHandler)
  }
}

// 创建API服务实例
const apiService = new APIService()

// 导出API服务实例和相关模块
export default apiService

// 单独导出各个API模块（兼容旧的使用方式）
export {
  authAPI,
  deviceAPI,
  orderAPI,
  userAPI,
  http,
  API_CONFIG,
  API_ENDPOINTS,
  USER_STATUS,
  USER_ROLE,
  DEVICE_STATUS,
  ORDER_STATUS
}

// 导出API服务类（用于创建新实例）
export { APIService } 